// pages/applyRefund/applyRefund.js
var http = require('../../utils/http.js');
Page({

  /**
   * 页面的初始数据
   */
  data: {
    refundType: 2,  // 退款类型 1整单  2单个物品
    // 货物状态
    goodsStateArray: ['未收到货', '已收到货' ],
    isReceiver: 0,  //货物状态(1:已收到货 0:未收到货)
    
    //  退款原因
    refundReasonArray: ['请选择', '未按约定时间发货', '拍错/多拍/不喜欢', '协商一致退款', '快递一直未送达', '商品破损/少件', '商品与描述不符', '卖家发错货', '质量问题', '其他'],
    buyerReason: 0,  //退款原因

    
    refundItem: {},  //订单项数据
    orderItemId: '',  //订单项ID（单个物品退款时使用）
    refundType: 2,   //退款单类型（1:整单退款,2:单个物品退款）
    orderNumber: '',  //订单编号

    applyType: 1,  //退款方式(1:仅退款 2退款退货)
    goodsNum: 0,  //退货数量（0或不传值则为全部数量）
    // quantity: 1,  //退货数量
    refundAmount: 0,  //退款金额

    buyerMobile: '',  //手机号码（默认当前订单手机号码）
    buyerDesc: '',  //备注说明
    photoFiles: [],  //凭证图片列表
    refundAmount: 0, //实际退款金额
    maxRefundAmount: 0, //最大退款金额
    actualTotal: 0,  //总额
    isLastProd: false,  //是否最后一样商品
    prodPrice: 0,  //商品单价
  },


  /**
   * 货物状态picker选择
   */
  goodsStateArray: function (e) {
    console.log('货物状态', e.detail.value)
    this.setData({
      isReceiver: e.detail.value
    })
  },
  
  /**
   * 退款原因picker选择
   */
  refundReasonChange: function (e) {
    console.log('退款原因', e.detail.value)
    this.setData({
      buyerReason: e.detail.value
    })
  },


  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    // 拿到上一页的参数type（判断退款方式）
    console.log('type：',options.type)
    if (options.type) {
      this.setData({
        applyType: options.type  // 1仅退款 2退货退款
      })
      console.log(this.data.type)
    }
    console.log('refundType：',options.refundType)
    this.setData({
      refundType: options.refundType  // 退款类型 1整单  2单个物品
    })
    console.log(this.data.refundType)

    this.getRefundProdInfo()  //获取退款商品信息
  },

  /**
   * 获取退款商品信息
   */
  getRefundProdInfo: function() {
    let refundType = this.data.refundType  // 退款类型 1整单  2单个物品
    //拿到缓存里的订单项数据
    var refundItem = wx.getStorageSync("refundItem");
    console.log(refundItem)
    this.setData({
      refundItem: refundItem,
      orderNumber: refundItem.orderNumber,
      goodsNum: refundItem.prodCount,
      actualTotal: refundItem.actualTotal,  //总额
      isLastProd: refundItem.isLastProd  //是否最后一样商品
    })
    console.log(refundItem.isLastProd)
    if(refundType == 1) {  //整单退款
      this.setData({
        orderItemDtos: refundItem.orderItemDtos, //商品列表
      });
    }
    let actualTotal = this.data.actualTotal  //商品总额（不含运费）
    let prodCount = refundItem.prodCount  //商品总数
    console.log(prodCount)
    console.log(actualTotal)
    if(refundType == 2) {  //单个退
      // 计算商品单价
      if(prodCount > 0) {
        let prodPrice = actualTotal / prodCount  //商品单价
        this.setData({
          prodPrice
        })
        console.log(this.data.prodPrice)
      }
    }

    this.refundAmount() //退款金额计算
  },

  /**
   * 退款金额计算
   */
  refundAmount: function() {
    let actualTotal = this.data.actualTotal
    console.log('总额this.data.actualTotal：',this.data.actualTotal)
    let refundItem = this.data.refundItem
    console.log('商品item,this.data.refundItem：',this.data.refundItem)
    let refundType = this.data.refundType  // 退款类型 1整单  2单个物品
    console.log('refundType退款类型 1整单  2单个物品：',this.data.refundType)
    if (refundItem.status == 2) { //待发货状态
      if(refundType == 2) {  //单个退,
        if(refundItem.isLastProd) {  //如果是最后一个可退运费（actualTotal总额不包含运费）
          this.setData({
            refundAmount: actualTotal + refundItem.transfee,
          });
          console.log('运费：',refundItem.transfee,'+总额：',actualTotal)
          console.log('待发货单个退（最后一个）金额：',this.data.refundAmount)
        }else { //否则不退
          this.setData({
            refundAmount: actualTotal,
          });
          console.log('运费：',refundItem.transfee,'+总额：',actualTotal)
          console.log('待发货单个退（不是最后一个）金额：',this.data.refundAmount)
        }
      } else if(refundType == 1) {  //整单退，退实际金额（actualTotal总额包含运费）
        this.setData({
          refundAmount: actualTotal,
        });
        console.log('运费：',refundItem.transfee)
        console.log('待发货整单退金额：',this.data.refundAmount)
      }
    } else if (refundItem.status != 2) { // 已发货订单（整单退运费（总额包含运费）；单个不退运费（总额不包含运费））
       this.setData({
         refundAmount: actualTotal,
       });
       console.log('运费：',refundItem.transfee)
       console.log('已发货整单退金额：',this.data.refundAmount)
    }
  },

   /**
   * 减数量
   */
  onCountMinus: function() {
    let goodsNum = this.data.goodsNum;  //展示的商品总数
    let actualTotal = this.data.actualTotal  //商品总额（不含运费）
    let prodPrice = this.data.prodPrice  //商品单价
    console.log('计算的单个金额：',prodPrice)
    if (goodsNum > 1) {
      goodsNum -= 1 //数量先减1
      actualTotal = prodPrice * goodsNum  //总额 = 减1后的数量*单件金额
      this.setData({
        goodsNum,
        actualTotal
      });
      console.log('减1后的数量：',this.data.goodsNum)
      console.log('减1后的总额：',this.data.actualTotal)
      this.refundAmount()  //计算商品总额
    }if(goodsNum < 1) {
      wx.showToast({
        title: '退货数量不能小于1！',
        icon: 'none',
      })
    }
  },

  /**
   * 加数量
   */
  onCountPlus: function() {
    var goodsNum = this.data.goodsNum
    var prodCount = this.data.refundItem.prodCount  //商品总数
    let actualTotal = this.data.actualTotal  //商品总额（不含运费）
    let prodPrice = this.data.prodPrice  //商品单价
    console.log(prodPrice)
    if (goodsNum < prodCount) {
      goodsNum = goodsNum + 1
      actualTotal = prodPrice * goodsNum  //总额 = 减1后的数量*单件金额
      this.setData({
        goodsNum,
        actualTotal
      })
      console.log('数量：',this.data.goodsNum)
      console.log('金额：',this.data.actualTotal)
      this.refundAmount()  //计算商品总额
    } else if (goodsNum == prodCount) {
      wx.showToast({
        title: '退货数量不能大于订单商品数量！',
        icon: 'none',
      })
    };
  },



  /**
   * 上传图片
   */
  getUploadImg: function (e) {
    const idx = e.target.dataset.idx
    console.log(idx);
    var ths = this;
    wx.chooseImage({
      count: 5, // 默认9
      sizeType: ['compressed'],
      sourceType: ['album', 'camera'],
      success: function (res) {
        // 图片的本地临时文件路径列表
        var tempFilePaths = res.tempFilePaths;
        wx.showLoading({
          mask: true
        })
        var params = {
          url: "/p/file/upload",
          filePath: tempFilePaths[0],
          name: 'file',
          callBack: function (res2) {
            wx.hideLoading();
            var img = {};
            img.path = JSON.parse(res2).filePath;
            img.url = JSON.parse(res2).resourcesUrl + JSON.parse(res2).filePath;
            var photoFiles = ths.data.photoFiles;
            photoFiles.push(img);
            ths.setData({
              photoFiles: photoFiles
            })
          }
        };
        http.upload(params);
      }
    })
  },

  /**
   * 删除图片
   */
  removeImage:function(e)  {
    var idx = e.currentTarget.dataset.idx;
    var photoFiles = this.data.photoFiles;
    photoFiles.splice(idx, 1)
    this.setData({
      photoFiles: photoFiles
    });
    console.log('删除图片')
  },


  /**
   * 申请退款
   */
  applyRefund: function () {
    var myreg = /^1(3|4|5|6|7|8|9)\d{9}$/;
    var pics = '';
    this.data.photoFiles.forEach(function (item) {
      pics += item.path + ',';
    });
    if (pics != '') {
      pics = pics.substring(0, pics.length - 1)
    }
    //TODO 检查数据完整性
    if (this.data.buyerReason == 0) {
      wx.showToast({
        icon: 'none',
        title: '请选择退款原因',
      })
    } else if (this.data.actualTotal <= 0){
      wx.showToast({
        icon: 'none',
        title: '请填写正确的退款金额',
      })
    } else if (this.data.buyerMobile.length !== 11 || !myreg.test(this.data.buyerMobile)) {
      console.log(this.data.buyerMobile)
      wx.showToast({
        icon: 'none',
        title: '请填写正确的手机号码',
      })
    } else if (this.data.buyerDesc.length == 0) {
      wx.showToast({
        icon: 'none',
        title: '请填写退款说明',
      })
    }else{
      console.log('status：',this.data.refundItem.status)
      console.log('isLastProd：',this.data.isLastProd)
      if(this.data.refundItem.status == 2 && this.data.isLastProd) {  //待发货并且是最后一件
        console.log('待发货并且是最后一件')
        console.log(this.data.isLastProd)
        wx.showModal({
          title: '提示',
          content: '本次申请的退款商品是本单最后一件商品，退款金额中包含本单运费，一旦提交申请，本单所有商品的退款申请均不可撤销，是否确认提交？',
          success: res => {
            if (res.confirm) {
              console.log('用户点击确定')
              wx.showLoading();
              var params = {
                url: "/p/orderRefund/apply",
                method: "POST",
                data: {
                  orderNumber: this.data.orderNumber, //订单编号
                  applyType: this.data.applyType, //退款方式(1:仅退款 2退款退货)
                  isReceiver: Number(this.data.isReceiver), //货物状态(1:已收到货 0:未收到货)
                  buyerReason: this.data.refundReasonArray[this.data.buyerReason], //退款原因
                  goodsNum: this.data.goodsNum, //退款数量（0或不传值则为全部数量）
                  refundAmount: this.data.actualTotal, //退款金额
                  buyerMobile: this.data.buyerMobile, //手机号码（默认当前订单手机号码）
                  buyerDesc: this.data.buyerDesc, //备注说明
                  photoFiles: pics, //凭证图片列表
                  refundType: this.data.refundType, //退款单类型（1:整单退款,2:单个物品退款）
                  orderItemId: this.data.refundItem.orderItemId
                },
                callBack: (res) => {
                  wx.hideLoading();
                  //TODO 去到我的退款订单页面
                  wx.redirectTo({
                    url: '/pages/afterSales/afterSales',
                  })
                }
              };
              http.request(params);
            } else if (res.cancel) {
              console.log('用户点击取消')
            }
          }
        })
      } else {
        console.log('非待发货或者非是最后一件')
        console.log(this.data.isLastProd)
        wx.showLoading();
        var params = {
          url: "/p/orderRefund/apply",
          method: "POST",
          data: {
            orderNumber: this.data.orderNumber, //订单编号
            applyType: this.data.applyType, //退款方式(1:仅退款 2退款退货)
            isReceiver: Number(this.data.isReceiver), //货物状态(1:已收到货 0:未收到货)
            buyerReason: this.data.refundReasonArray[this.data.buyerReason], //退款原因
            goodsNum: this.data.goodsNum, //退款数量（0或不传值则为全部数量）
            refundAmount: this.data.actualTotal, //退款金额
            buyerMobile: this.data.buyerMobile, //手机号码（默认当前订单手机号码）
            buyerDesc: this.data.buyerDesc, //备注说明
            photoFiles: pics, //凭证图片列表
            refundType: this.data.refundType, //退款单类型（1:整单退款,2:单个物品退款）
            orderItemId: this.data.refundItem.orderItemId
          },
          callBack: (res) => {
            wx.hideLoading();
            //TODO 去到我的退款订单页面
            wx.redirectTo({
              url: '/pages/afterSales/afterSales',
            })
          }
        };
        http.request(params);
      }
    }
  },

  /**
   * 修改退款申请
   */
  alterRefundApply:function (e) {

  },
  
  /**
   * 将获取到的input内容放进数据里
   */
  onDescInput:function(e){
    this.setData({
      buyerDesc:e.detail.value
    });
  },
  onRefInput:function (e) {
    this.setData({
      refundAmount: e.detail.value
    })
  },
  onMobileInput:function(e) {
    this.setData({
      buyerMobile: e.detail.value
    })
  },



  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})